package com.xbongbong.paas.bi.pojo;

import com.alibaba.fastjson.JSONObject;
import com.xbongbong.paas.field.ItemPoJo;
import com.xbongbong.paas.field.SubFormPoJo;
import com.xbongbong.paas.pojo.BiExplainPojo;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

import javax.validation.constraints.NotEmpty;
import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * 合并、连接节点内的field信息
 * @author zcp
 * @version v1.0
 * @since v1.0
 */
@Getter
@Setter
@ToString
@NoArgsConstructor
public class DataSetNodeFieldPojo implements Serializable {
    private static final long serialVersionUID = 8395523144890561129L;
    /**
     * 根据是否合并连接字段，控制合并字段。左连接左表连接字段启用、右连接右表连接字段启用，内连接左表连接字段启用
     * 为空或为1代表需要恒显示，非1代表当合并连接字段时，该字段需隐藏
     * @see com.xbongbong.paas.enums.bi.DataSetFieldStatusEnum
     */
    private Integer status;
    /**
     * 连接节点背景颜色
     */
    private String bgColor;
    /**
     * 数据源节点：无field
     * 合并节点：每次选择源字段时，第一次选择的源字段作为合并字段的主formId，同attrName回显一样，后续选择其他源字段也不会影响到合并字段的attrName和formId
     * 连接节点：左连接用左表、右连接用右表，内连接、全连接统一用左表 -- 文钰
     * 分组汇总节点，规则：流入只有1个，直接使用流入节点的formId，如果流入节点无formId则无
     */
    private Long formId;
    /**
     * 和formId对应
     */
    private Integer businessType;
    /**
     * 字段原始attr，与formId规则一致
     */
    private String originalAttr;
    /**
     * 映射后attr
     */
    private String attr;
    /**
     * 字段名
     */
    private String attrName;
    /**
     * 字段类型
     */
    private Integer fieldType;
    /**
     * 字段attr类型，比如text
     *
     */
    private String attrType;
    /**
     * 数字字段为金额类型，1：是；0：不是
     * 金额的可能要特殊处理
     */
    private Integer amountFlag;
    /**
     * 合并节点各列的来源字段 或 连接节点左右表（根据连接得到的最终表头）字段
     * key：节点id
     * value：字段属性，可以映射为BiExplainPojo
     */
    @NotEmpty(message = "{dto.msg.dataSetNodeField.srcB.NotEmpty}")
    private Map<String, BiExplainPojo> srcB;
    /**
     * 前端使用 - 数据源节点表单、或其他四种特殊节点的字段，其中：key为节点id，value为表单id和字段名 - &符前是表单id，&符后是(映射后)字段名
     * "node_xx1":"1&serialNo"
     */
    private JSONObject src;
    /**
     * 时间字段的分组方式 - 使用BI内的存值格式
     * @see com.xbongbong.pro.enums.IntervalTypeEnum
     */
    private String dateType;
    /**
     * 汇总方式(AggTypeEnum)：求和、平均值、最小值、最大值、计数
     * @see com.xbongbong.paas.enums.AggTypeEnum
     */
    private String aggType;
    /**
     * 关联类型字段属性
     */
    private JSONObject linkedAttr;
    /**
     * 关联业务选择，关联字段
     */
    private String linkedText;

    /**
     * 筛选类型
     * 1：可筛选
     * 2：不可筛选
     * @see com.xbongbong.paas.enums.ScreenTypeEnum
     */
    private Integer screenType;
    
    private Integer saasMark;
    /**
     * 数字是否使用千分符
     */
    private Integer groupingUsed;
    /**
     * 数字是否使用百分比
     */
    private Integer percentUsed;
    /**
     * 精度
     */
    private Integer accuracy;
    /**
     * 用于下拉框，下拉复选，单选，复选的选项值
     */
    private List<ItemPoJo> items;
    /**
     * 子表单相关信息
     */
    private SubFormPoJo subForm;
    /**
     * 默认开启 1:开启，0：关闭，2：回收站
     */
    private Integer isOpen;
    
    public DataSetNodeFieldPojo(Integer status, String bgColor, Long formId, String originalAttr, String attr, String attrName, Integer fieldType, String attrType, Integer amountFlag){
        this.status = status;
        this.bgColor = bgColor;
        this.formId = formId;
        this.originalAttr = originalAttr;
        this.attr = attr;
        this.attrName = attrName;
        this.fieldType = fieldType;
        this.attrType = attrType;
        this.amountFlag = amountFlag;
    }
    
}
